package com.coderworm.tcp;



import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * RTCM文件TCP接收服务端
 * 监听端口：8888（可配置，需与嵌入式端一致）
 * 线程池：处理多设备同时上传（嵌入式场景可能多设备并发）
 */
public class RtcmTcpServer {
    // 监听端口（与嵌入式端约定）
    private static final int TCP_PORT = 8888;
    // 线程池：处理并发连接（核心线程数=CPU核心数，避免线程过多）
    //private static final ExecutorService THREAD_POOL = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
    private static final ExecutorService THREAD_POOL = Executors.newFixedThreadPool(2);

    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(TCP_PORT)) {
            System.out.println("RTCM文件TCP服务端已启动，监听端口：" + TCP_PORT);
            // 循环监听客户端连接（嵌入式设备就是客户端）
            while (true) {
                Socket clientSocket = serverSocket.accept(); // 阻塞，直到有设备连接
                String clientIp = clientSocket.getInetAddress().getHostAddress();
                System.out.println("收到设备连接：" + clientIp);
                // 提交任务到线程池，异步处理（避免阻塞主线程，影响其他设备连接）
                THREAD_POOL.submit(new RtcmFileHandler(clientSocket));
            }
        } catch (Exception e) {
            System.err.println("TCP服务端异常：" + e.getMessage());
            e.printStackTrace();
        } finally {
            THREAD_POOL.shutdown(); // 服务端关闭时关闭线程池
        }
    }
}